package com.smartleanx.module.hrm.util.esign;

/**
 * 脱敏工具类（姓名、手机号、身份证号）
 *
 * @author yanglihao
 */
public class DesensitizationUtils {

    /**
     * 姓名脱敏处理（保留姓氏，其余替换为*）
     * 
     * @apiNote 示例：张三 → 张*，欧阳修 → 欧**，单字姓名 → *
     */
    public static String desensitizeName(String name) {
        if (name == null || name.isEmpty()) {
            return "";
        }
        int length = name.length();
        if (length == 1) {
            return "*";
        }
        return name.charAt(0) + name.substring(1).replaceAll(".", "*");
    }

    /**
     * 手机号脱敏处理（保留前3位和后4位）
     * 
     * @apiNote 示例：13812345678 → 138****5678
     */
    public static String desensitizePhone(String phone) {
        if (phone == null) {
            return null;
        }
        int len = phone.length();
        if (len != 11) {
            return phone; // 非标准手机号返回原值
        }
        return phone.substring(0, 3) + "****" + phone.substring(7);
    }

    /**
     * 身份证号脱敏处理（保留前6位和后4位/后3位）
     * 
     * @apiNote 示例：15位：110105670912345 → 110105******345，18位：110105199901011234 → 110105********1234
     */
    public static String desensitizeIdNumber(String idNumber) {
        if (idNumber == null) {
            return null;
        }
        int length = idNumber.length();

        // 生成星号字符串的辅助方法
        StringBuilder stars = new StringBuilder();
        int starCount;

        if (length == 15) {
            starCount = 6;
        } else if (length == 18) {
            starCount = 8;
        } else {
            return idNumber; // 非标准身份证号返回原值
        }

        for (int i = 0; i < starCount; i++) {
            stars.append('*');
        }

        return idNumber.substring(0, 6) + stars + idNumber.substring(length - (length == 15 ? 3 : 4));
    }
}
